//package com.loong.forehead.gateway.handler;
//
//
//
//import com.loong.common.nacos.DynamicKey;
//import com.loong.common.utils.DESEncrypt;
//import com.loong.global.constant.RedisKey;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import javax.annotation.Resource;
//
//@Slf4j
//@Component
//public class TokenHandler {
//
//    /**
//     * Token加密盐值
//     */
//    public static final String LOGIN_KEY = "global2018#";
//
//    @Resource
//    private DynamicKey dynamicKey;
//    @Resource
//    private RedisService redisService;
//
//    /**
//     * 通过Token获取被踢出的Token信息
//     *
//     * @param token
//     * @return
//     */
//    public UserKickedInfo getKickedInfo(final String token) {
//        String decryptToken;
//        try {
//            decryptToken = DESEncrypt.decrypt(token, LOGIN_KEY);
//        } catch (Exception e) {
//            log.error("token decrypt error", e);
//            decryptToken = token;
//        }
//        return redisService.get(RedisKey.TOKEN.KICKED_TOKEN + decryptToken, UserKickedInfo.class);
//    }
//
//    /**
//     * 验证Token是否有效
//     *
//     * @param uid
//     * @param osType
//     * @param appType
//     * @param token
//     * @param deviceId
//     * @return
//     */
//    public boolean validationToken(String uid, String osType, String appType, String token, String deviceId) {
//        String decryptToken;
//        try {
//            decryptToken = DESEncrypt.decrypt(token, LOGIN_KEY);
//        } catch (Exception e) {
//            log.error("token decrypt error", e);
//            decryptToken = token;
//        }
//        String tokenKey = getTokenKey(Integer.valueOf(uid), Integer.valueOf(appType), Integer.valueOf(osType), deviceId);
//        String redisToken = redisService.get(tokenKey);
//        if (StringUtils.isEmpty(redisToken)) {
//            return false;
//        }
//        String uidKey = RedisKey.TOKEN.REQ_LOGIN + decryptToken;
//        String redisUid = redisService.get(uidKey);
//        if (StringUtils.isEmpty(redisUid)) {
//            return false;
//        }
//        if (redisToken.equals(decryptToken) && redisUid.equals(uid)) {
//            redisService.setTTL(tokenKey, DateConstant.SECOND.DAY);
//            redisService.setTTL(uidKey, DateConstant.SECOND.DAY);
//            redisService.setTTL(RedisKey.USER.DETAIL_CACHE + redisUid, DateConstant.SECOND.DAY);
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    /**
//     * 获取存储Token的Key
//     *
//     * @param userId
//     * @param appType
//     * @param clientType
//     * @param deviceId
//     * @return
//     */
//    private String getTokenKey(Integer userId, Integer appType, Integer clientType, String deviceId) {
//        String tokenKey = null;
//        if (appType == AppType.PROXY) {
//            tokenKey = getProxyTokenKey(userId, deviceId);
//        } else {
//            tokenKey = getMemberTokenKey(userId, clientType, appType);
//        }
//        return tokenKey;
//    }
//
//    /**
//     * 获取会员端的Token存储Key
//     *
//     * @param userId
//     * @param clientType
//     * @param appType
//     * @return
//     */
//    private String getMemberTokenKey(Integer userId, Integer clientType, Integer appType) {
//        if (dynamicKey.getDynamicValue(DynamicKey.Key.MEMBER_MULTI_LOGIN_ENABLE, Boolean.class)) {
//            return RedisKey.TOKEN.REQ_TOKEN + clientType + "_" + appType + "_" + userId;
//        } else {
//            return RedisKey.TOKEN.REQ_TOKEN + "_" + userId;
//        }
//    }
//
//    /**
//     * 获取代理端的Token存储Key
//     *
//     * @param userId
//     * @param deviceId
//     * @return
//     */
//    private String getProxyTokenKey(Integer userId, String deviceId) {
//        if (dynamicKey.getDynamicValue(DynamicKey.Key.PROXY_MULTI_LOGIN_ENABLE, Boolean.class)) {
//            return RedisKey.TOKEN.REQ_TOKEN + "_" + AppType.PROXY + "_" + userId + "_" + deviceId;
//        } else {
//            return RedisKey.TOKEN.REQ_TOKEN + "_" + userId;
//        }
//    }
//
//}
